package stardust.core.network.protocol.http;


public enum CacheControl
{

  /**
   * no-cache 指示请求或响应消息不能缓存。
   */
  noCache("no-cache"),
  /**
   * no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
   */
  noStore("no-store"),
  /**
   * max-age 指示客户机可以接收生存期不大于指定时间（以秒为单位）的响应。
   */
  maxAge("max-age"),
  /**
   * min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
   */
  maxStale("max-stale"),
  /**
   * max-stale 指示客户机可以接收超出超时期间的响应消息。 如果指定max-stale消息的值，那么客户机可以接收超出超时期指定值之内的响应消息。
   */
  minFresh("min-fresh"),
  /**
   * only-if-cached
   */
  onlyIfCached("only-if-cached"),
  /*
   * public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate
   * 、max-age
   */
  /**
   * public 指示响应可被任何缓存区缓存。
   */
  publicCache("public"),
  /**
   * private 指示对于单个用户的整个或部分响应消息，不能被共享缓存处理。
   * 这允许服务器仅仅描述当用户的部分响应消息，此响应消息对于其他用户的请求无效。
   */
  privateCache("private"),
  /**
   * no-transform
   */
  noTransform("no-transform"),
  /**
   * must-revalidate
   */
  mustRevalidate("must-revalidate"),
  /**
   * proxy-revalidate
   */
  proxyRevalidate("proxy-revalidate");

  public final String value;

  private CacheControl(String value)
  {
    this.value = value;
  }

  public static CacheControl get(String value)
  {
    CacheControl[] types = CacheControl.values();

    for (int i = 0; i < types.length; i++)
    {
      if (types[i].value.equalsIgnoreCase(value))
      {
        return types[i];
      }
    }

    return null;
  }

  public String getValue()
  {
    return this.value;
  }

  public String toString()
  {
    return this.getValue();
  }

}
